#!/bin/env ruby
require "./PNJ.rb"

##
#=Classe Ennemi
#La classe Ennemi représente un ennemi et elle hérite de la classe PNJ.
#
#=Attributs :
#[@force] Contient la force de l'Ennemi
#[@defense] Contient la defense de l'Ennemi
#[@or] Contient l'or détenu par l'Ennmi
#[@loot] Liste d'objets détenu par l'Ennemi
#[@energie] Contient l'energie d'un Ennemi
#
class Ennemi < PNJ
	
	@force
	@defense
	@or
	@loot
	@energie
	
	private_class_method :new
    
	# Création d'un ennemi
	def Ennemi.naissance(id,nom,enCase,force,defense,argent,loot,energie)
		new(id,nom,enCase,force,defense,argent,loot,energie)
	end
	
	# Méthode d'initialisation d'un ennemi
	def initialize(id,nom,enCase,force,defense,argent,loot,energie)
		super(id,nom,enCase)
		@force		= force
		@defense	= defense
		@or		= argent
		@loot		= loot
		@energie	= energie
	end
	
    # Retourne la force d'un ennemi
	def getForce
		return @force
	end
	
    # Remplace la force de l'ennemi par la force entrée en paramètre
	def setForce(lePlus)
		@force=lePlus
	end
	
    # Retourne la defense d'un ennemi
	def getDefense
		return @defense
	end
	
    # Remplace la defense de l'ennemi par la defense entrée en paramètre
	def setDefense(lePlus)
		@defense=lePlus
	end
	
    # Retourne l'or d'un ennemi
	def getOr
		return @or
	end
	
    # Remplace l'or de l'ennemi par l'or entrée en paramètre
	def setOr(lePlus)
		@or=lePlus
	end
	
    # Retourne la liste d'objets d'un ennemi
	def getLoot
		return @loot
	end
	
    # Remplace la liste d'objets de l'ennemi par la liste d'objets entrée en paramètre
	def setLoot(lePlus)
		@loot=lePlus
	end
	
    # Retourne l'energie d'un ennemi
	def getEnergie
		return @energie
	end
	
    # Remplace l'energie de l'ennemi par l'energie entrée en paramètre
	def setEnergie(lePlus)
		@energie=lePlus
	end
		
	# L'ennemi perd de l'energie en fonction d'une quantité d'energie donnée
	def diminuerEnergie(gain)
		if(gain >= getEnergie())
			@energie = 0	
		else
			@energie -= gain
		end
	end
	
	# Vérifie que l'ennemi est vivant
	def estVivant()
		return (@energie > 0)
	end
	
	# Renvoit vrai si l'ennemi a pu porter son coup, faux sinon
	def taperSur(heros)
		degat = getForce() - heros.getDefense()
		
		if(degat>0)
			heros.diminuerEnergie(degat)
		end
		return degat
	end
	
    # Retourne la liste d'ojets à la mort de l'ennemi
	def mourir()
        @energie = 0    # pour être sûr qu'il meurt
		return @loot
	end
	
    # Retourne le contenu des attributs sous la forme d'une chaine de carctères
	def to_s
		return super+", force : #{@force}, defense : #{@defense}, or : #{@or}, loot : #{@loot}, energie : #{@energie}"
	end

end # Marqueur de fin de classe

